package com.sun.managementsystemsimulationhomeworkcode.chapter2.arrive;

import java.util.ArrayList;
import java.util.Random;

/**
 * 指数分布时间生成器
 *
 * @author Haoran Sun
 * @since 2024/09/18
 */


public class ExponentialGenerator {

    public static ArrayList<Double> generate(){
        // 平均到达时间，即λ的倒数
        double meanArrivalTime = 0.5;
        // λ参数
        double lambda = 1 / meanArrivalTime;
        // 开始时间
        double startTime = (double) 5 /60;
        // 结束时间
        double endTime = 240;
        double currentTime = startTime;

        ArrayList<Double> arrivalTimes = new ArrayList<>();

        Random random = new Random();

        // 生成到达时间，直到达到结束时间
        while (currentTime < endTime) {
            // 生成0到1之间的均匀分布随机数
            double uniformRandom = random.nextDouble();

            // 应用反变换法得到指数分布随机变量
            double exponentialRandom = -Math.log(1 - uniformRandom) / lambda;

            // 更新当前时间
            currentTime += exponentialRandom;

            // 收集有效到达时间
            if (currentTime >= startTime && currentTime < endTime) {
                arrivalTimes.add(currentTime);
            }
        }



        return arrivalTimes;
    }


}
